package com.study.designpattern.singleton;

public class lazySingletonTest {
    public static void main(String[] args) {
        lazySingleton instance=lazySingleton.getInstance();
        lazySingleton instance1=lazySingleton.getInstance();
        System.out.println(instance==instance1);
//        new Thread(()->{
//            lazySingleton instance=lazySingleton.getInstance();
//            System.out.println(instance);
//        }).start();
//        new Thread(()->{
//            lazySingleton instance1=lazySingleton.getInstance();
//            System.out.println(instance1);
//        }).start();
    }
}
class lazySingleton {
    //声明但是不初始化，懒汉
    private volatile static lazySingleton instance;
    private lazySingleton(){}
    public static lazySingleton getInstance() {
        if (instance == null) {
           synchronized (lazySingleton.class){
               if (instance==null){
                   /*
                   字节码层面
                   JIT,JVM
                   1.分配空间
                   ps：2，3可能会颠倒顺序，有可能会发生空指针错误。 volatile解决此类问题
                   2.引用赋值
                   3.初始化
                    */
                   instance=new lazySingleton();
               }
           }
        }
        return instance;
    }
}